package util;

import java.util.List;

import junit.framework.TestCase;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

/**
 * Lanceur de test
 */
public class TestLauncher {
	
	private TestLoader testLoader;
	
	/**
	 * Constructeur par defaut
	 * @throws ClassNotFoundException
	 */
	public TestLauncher() throws ClassNotFoundException {
		super();
		testLoader = new TestLoader();
	}
	
	/**
	 * Retourne les resultats des tests
	 * @return le result des tests sous formes de string
	 * @throws ClassNotFoundException
	 */
	public String getResults() throws ClassNotFoundException {
		List<Class<TestCase>> testClasses = testLoader.getTestClasses();
		StringBuilder sb = new StringBuilder();
		if (testClasses.size() < 2) {
			sb.append(testClasses.size() + " classe de test trouvee !\n\n");
		} else {
			sb.append(testClasses.size() + " classes de test trouvees !\n\n");
		}
		for (Class<TestCase> cl : testClasses) {
			sb.append(cl.getName() + ": ");
			Result r = JUnitCore.runClasses(cl);
			if (r.wasSuccessful()) {
				sb.append("tous les tests ont reussis !\n");
			} else {
				if (r.getFailureCount() < 2) {
					sb.append(r.getFailureCount() + " test  a echoue !\n");
				} else {
					sb.append(r.getFailureCount() + " tests ont echoues !\n");
				}
				for (Failure f : r.getFailures()) {
					sb.append("\tdans " + f.getTestHeader() + ": " + f.getException());
				}
			}
		}
		return sb.toString();
	}
}
